//参考网站http://blog.csdn.net/robincin_s/article/details/51537912
var pageCount = ''; //页面序列
var pageList = [];
var block = 0; //
var que = []; //模拟队列 
var len = 0;
var Q = [];
function start() {
	Clock();
}

function init() {
	pageCount = $("#pageList").val();
	block = $('#Size').val();
	pageList = pageCount.split(';');
	len = pageList.length;
	for (var i = 0; i < block; i++) {
		que[i] = -1; //-1代表当前物理块为空
	}
}

function change() {
	const num = 100 * Math.random();
	if ((num % 2 + 1) == 1) {
		printText('该页面被修改\n');
	} else {
		return false;
	}
}

function inblock(num) {
	for (var i = 0; i < block; i++) {
		if (Q[i].sta == pageList[num]) {
			if (change()) {
				Q[i].A = 1;
				Q[i].M = 1;
			} else {
				Q[i].A = 1;
				Q[i].M = 0;
			}
			return true;
		}
	}
	return false;
}

function Search() {
	var j;
	for (j = 0; j < block; j++) {
		if (Q[j].A == 0 && Q[j].M == 0) {
			return j;
		}
	}
	for (j = 1; j <= block; j++) {
		if (Q[j].A == 0 && Q[j].M == 1) {
			return j;
		}
		Q[j].A = 0;
	}
	for (j = 1; j <= block; j++) {
		Q[j].A = 0;
	}
	return j;
}

function Clock() {
	init();
	var j;
	/*1类（A=0，M=0）：表示该页最近既未被访问，又未被修改，是最佳淘汰页。 
	2类（A=0，M=1）：表示该页最近未被访问，但已被修改，并不是很好的淘汰页。 
	3类（A=1，M=0）：表示该页最近已被访问，但未被修改，该页有可能在被访问。 
	4类（A=1，M=1）：表示该页最近已被访问且被修改，该页可能再被访问。*/
	for (var i = 0; i < block; i++) {
		Q[i] = new Object();
		Q[i].sta = -1;//状态码
		Q[i].A = 0;
		Q[i].M = 0;
	}
	for (var i = 0; i < len; i++) {
		printText('当前需访问的页面为' + pageList[i] + '\n');
		if (inblock(i)) {
			printText('该页面已存在于内存中\n');
		} else if (Q[block - 1].sta != -1) {
			j = Search();
			Q[j].sta = pageList[i];
			Q[j].A = 1;
		} else {
			for (var k = 0; k < block; k++) {
				if (Q[k].sta == -1) {
					Q[k].sta = pageList[i];
					break;
				}
			}
		}
		printText("序号"+ "      " + "访问位" + "      " + "修改位"+'\n');
		for (var k = 0; k < block; k++) {
			printText(Q[k].sta+ "             " + Q[k].A + "             " + Q[k].M +'\n');
		}
	}
	printText('结束\n');
}

function printText(str) {
	$("#print").append(str)
}
